#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

struct Intervallum {
    int x;
    int y;
    int h;
    int index;
};

bool operator< (Intervallum a, Intervallum b)
{
    return a.y < b.y;
}
int main()
{
    ifstream be("week3.txt");
    ofstream ki("week3mego.txt");
    string str;
    vector<Intervallum> intervals;
    vector<string> csatornanev;
    while(be>>str)
    {
        csatornanev.push_back(str);
        int n;
        be>>n;
        for(int i=0;i<n;i++)
        {
            int xx,h;
            be>>xx>>h;
            Intervallum interval;
            interval.x = xx;
            interval.h = h;
            interval.y = xx+h;
            interval.index = csatornanev.size()-1;
            intervals.push_back(interval);
        }
    }
    sort(intervals.begin(),intervals.end());
    vector<int> legjobb, elottelevo;
    vector<bool> kivalasztva;
    legjobb.resize(intervals.size()); // ami legfeljebb addig van
    kivalasztva.resize(intervals.size());
    elottelevo.resize(intervals.size());
    for(int i=0;i<intervals.size();++i) {
        legjobb[i] = intervals[i].h;
        elottelevo[i] = -1;
        kivalasztva[i] = true;
        for(int j=0;j<i;++j) {
            if(intervals[j].y <= intervals[i].x && legjobb[i] < legjobb[j]+intervals[i].h) {
                legjobb[i] = legjobb[j]+intervals[i].h;
                elottelevo[i] = j;
                kivalasztva[i] = true;
            }
            if(legjobb[i] < legjobb[j]) {
                legjobb[i] = legjobb[j];
                elottelevo[i] = j;
                kivalasztva[i] = false;
            }
        }
    }
    int mi=0;
    for(int i=1;i<intervals.size();++i) {
        if(legjobb[i] > legjobb[mi])
            mi = i;
    }
    vector<Intervallum> mego;
    while (mi != -1) {
        if (kivalasztva[mi]) {
            mego.push_back(intervals[mi]);
        }
        mi = elottelevo[mi];
    }
    sort(mego.begin(),mego.end());
    for(int i=0;i<mego.size();++i) {
        ki << mego[i].x << " " << csatornanev[mego[i].index] << endl;
    }
    be.close();
    ki.close();
}
